package com.tinchos.core.persistencia;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

import com.tinchos.entidades.facultad.Facultad;
import com.tinchos.entidades.facultad.Materia;

public class MateriaDAO implements DAO {

	
	public boolean cargarMaterias() {
		
		String archivoACargar = "./Data/Materias/materias.xml";
		SAXBuilder builder = new SAXBuilder();
		
		Document doc = null;
		Element root = null;
		
		try {
			doc = builder.build(new FileInputStream(archivoACargar));
		} catch (JDOMException e) {
			//TODO crear excepciones
			System.out.println("Error");
			return false;
		} catch (IOException e) {
			//TODO crear excepciones
			System.out.println("Error");
			return false;
		}
		if (doc == null) {
			System.out.println("null!!");
			System.exit(1);
		}
		root = doc.getRootElement();
		
		List materias = root.getChildren("materia");
		
		Iterator iter = materias.iterator();
		
		while (iter.hasNext()) {
		
			Materia materia = getMateria((Element)iter.next());
			Facultad.getInstance().agregarMateria(materia);
			
			System.out.println("Se cargo: " + materia.getNombre() + ".");
			
		}
		
		return true;
		
	}
	
	
	public Materia getMateria(Element nodo) {
		Materia materia = new Materia();
		
		materia.setNombre(nodo.getAttributeValue("nombre"));
		materia.setCodigo(nodo.getAttributeValue("codigo"));
		materia.setCodigoDepartamento(nodo.getAttributeValue("codigoDepartamento"));
		materia.setCreditos(Integer.parseInt(nodo.getAttributeValue("creditos")));
		
		return materia;
		
	}
	
	/* NodoXML a partir de instancia */
	public Element obtenerNodo(Materia materia) {
		Element nodo = new Element("materia");
		
		nodo.setAttribute(new Attribute("nombre", materia.getNombre()));
		nodo.setAttribute(new Attribute("codigo", materia.getCodigo()));
		nodo.setAttribute(new Attribute("nombre", materia.getCodigoDepartamento()));
		nodo.setAttribute(new Attribute("creditos", String.valueOf(materia.getCreditos())));
		
		return nodo;
	}
	

}
